package persistencia.cliente;



import java.sql.CallableStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import Excepciones.ExccepcionFormeteoDeFechas;



import negocio.cliente.Cliente;

import persistencia.DACBase;

public class DACCliente extends DACBase{

	private Cliente cliente;
	private List<Cliente> clientes;
	private CallableStatement clstm;
	private ResultSet rs;
	
	
	public DACCliente(DACBase dacBase) {
			super(dacBase);
	}
	
	
	public List<Cliente> consultarClientes(){
		clientes = new ArrayList<Cliente>();
		try{
			clstm = getConn().prepareCall("{call clienteConsultarTodos()}"); 
			clstm.execute();
			rs = clstm.getResultSet();			
			while (rs.next()) {
				cliente = new Cliente();
				cliente.setIdCliente(rs.getInt("idcliente"));						     
			    cliente.setCuit(rs.getString("cuit"));
			    cliente.setRazonSocial(rs.getString("razonsocial"));
			    cliente.setFechaAlta(rs.getDate("fechaalta"));
			    //falta resolver el teme de industria y domicilio
			    clientes.add(cliente);
			}
			
			rs.close();
			rs = null;
			clstm.close();
            clstm = null;
            
           
		}
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarClientes()_DacCliente");
			}
		
		return clientes;
	}
	
	public Cliente consultarCliente(int idCliente){
		cliente = null;
		try{
			clstm = getConn().prepareCall("{call clienteConsultar(?)}"); 
			clstm.setInt("id", idCliente);// Elparametro
			clstm.execute();
			rs = clstm.getResultSet();
			
			if (rs.next()) {
				cliente = new Cliente();
				cliente.setIdCliente(rs.getInt("idcliente"));						     
			    cliente.setCuit(rs.getString("cuit"));
			    cliente.setRazonSocial(rs.getString("razonsocial"));
			    cliente.setFechaAlta(rs.getDate("fechaalta"));
			    //falta resolver el teme de industria y domicilio			    
			}
			
			rs.close();
			rs = null;
			clstm.close();
            clstm = null;
            
        
		}
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		    System.out.println("Error en metodo consultarCliente(id)_DacCliente");
			}
		
		return cliente;
	}


	@Override
	protected void finalize() throws Throwable {
		// TODO Auto-generated method stub
		super.finalize();
	}
	
	/*
	 * por si las dudas
	 * public Cliente selectCliente(Cliente cliente){		
		
		try{
			clstm = getConn().prepareCall("{call mostrarCliente(?)}"); 
			clstm.setLong(1, cliente.getNroCliente());// Elparametro
			clstm.execute();
			rs = clstm.getResultSet();
			if (rs.next()) {
				 System.out.println(cliente);		     
			     cliente.setDni(rs.getLong(1));
			     cliente.setNombre(rs.getString(2));
			     cliente.setApellido(rs.getString(3));
			     cliente.setCalle(rs.getString(4));
			     cliente.setNumero(rs.getInt(5));
			     cliente.setLocalidad(rs.getString(6));
			     cliente.setTelefono(rs.getString(7));
			     cliente.setEmail(rs.getString(8));
			     cliente.setTipoDocumento(rs.getString(9));
				 this.cliente = cliente;
				 
				 rs.close();
		         rs = null;
            }
			else {
				this.cliente = null;
			}           

            clstm.close();
            clstm = null;
            
            getConn().close();
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
			}
		
	    return this.cliente;		
	}
	
	public long devolverCliente(long dni){		
		
		long nroCliente=0;
		try{
			clstm = getConn().prepareCall("{call devolverCliente(?)}"); 
			clstm.setLong(1, dni);
			clstm.execute();			
			rs = clstm.getResultSet();
			
			if (rs.next()) {
				System.out.println("Numero de cliene" + rs.getLong(1) );	     
			    nroCliente = rs.getLong(1);
				 
				 rs.close();
		         rs = null;
            }
			else {
				
			}           

            clstm.close();
            clstm = null;
            
            getConn().close();
		}    
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
			}
		
	    return nroCliente;		
	}
	
	public void insertCliente(Cliente cliente){
		this.cliente = cliente;
		try{	
			clstm = getConn().prepareCall("{call altaCliente(?, ?, ?, ?, ?, ?, ?, ?, ?)}");
			clstm.setLong(1, cliente.getDni());
			clstm.setString(2, cliente.getNombre());
			clstm.setString(3, cliente.getApellido());
			clstm.setString(4, cliente.getCalle());
			clstm.setInt(5, cliente.getNumero());
			clstm.setString(6, cliente.getLocalidad());
			clstm.setString(7, cliente.getTelefono());
			clstm.setString(8, cliente.getEmail());
			clstm.setString(9, cliente.getTipoDocumento());
			clstm.execute();
  
			clstm.close();
	        clstm = null;
	         
	        getConn().close();       	            
	        
		}
		
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		}		
		
	}
	
	public void updateCliente(Cliente cliente){
		
		this.cliente = cliente;
		try{	
			clstm = getConn().prepareCall("{call updateCliente(?, ?, ?, ?, ?, ?, ?, ?, ?, ?)}");
			clstm.setInt(1, cliente.getNroCliente());
			clstm.setLong(2, cliente.getDni());
			clstm.setString(3, cliente.getNombre());
			clstm.setString(4, cliente.getApellido());
			clstm.setString(5, cliente.getCalle());
			clstm.setInt(6, cliente.getNumero());
			clstm.setString(7, cliente.getLocalidad());
			clstm.setString(8, cliente.getTelefono());
			clstm.setString(9, cliente.getEmail());
			clstm.setString(10, cliente.getTipoDocumento());
			clstm.execute();
			
            clstm.close();
	        clstm = null;
	      
	        getConn().close();   
		}
		
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		}			    
		
	}
	
	public void deleteCliente(Cliente cliente){
		this.cliente = cliente;
		try{	
			clstm = getConn().prepareCall("{call deleteCliente(?)}");
			clstm.setInt(1, cliente.getNroCliente());
			
			clstm.execute();

	        clstm.close();
	        clstm = null;
	         
	        getConn().close();
			        
		}
		
		catch (SQLException ex) {
		    // handle any errors
		    System.out.println("SQLException: " + ex.getMessage());
		    System.out.println("SQLState: " + ex.getSQLState());
		    System.out.println("VendorError: " + ex.getErrorCode());
		}			    
	}

	public Cliente getCliente() {
		return cliente;
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getClientes() {
		return clientes;
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}
	
	*/
	
}
